home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK2.toast / Development Kits (Disc 2) / ScriptX / Draggable ScriptX Folders / utils / widgets / radiobtn.sx < prev    next >
Encoding:
Text File  |  1995-12-11  |  5.5 KB  |  223 lines  |  [TEXT/ttxt]

  1. --<<<
  2. class RadioButton(GenericButton)
  3. class variables
  4.     uncheckedStencil : (importDIB "media/radio.bmp")
  5.     checkedStencil : (importDIB "media/radioc.bmp")
  6.     clickedStencil :(importDIB "media/radiodp.bmp")
  7. instance variables
  8.     frame
  9.     stencilTransform
  10.     fill
  11.     _font
  12.     _text
  13. end
  14.  
  15. class CheckBox(RadioButton)
  16. class variables
  17.     uncheckedStencil : (importDIB "media/check.bmp")
  18.     checkedStencil : (importDIB "media/checkc.bmp")
  19.     clickedStencil :(importDIB "/media/checkdp.bmp")
  20. end
  21.  
  22. method init self {class RadioButton} #rest args #key
  23.     fill:(whiteBrush)        \
  24.     font:(theSystemFont)    \
  25.     text:("Hello")            \    
  26.     boundary:                \
  27.     frame:(undefined)->
  28. (
  29.     self._text := new TextStencil font:font.font \
  30.         size:font.fontSize string:text
  31.     local bbox
  32.     if (boundary = unsupplied) then (
  33.         bbox := copy self._text.bbox
  34.         bbox.width := bbox.width + (getClass self).checkedStencil.bbox.width + 10
  35.         InsetRect bbox -3 -3 @mutate
  36.         MoveToZero bbox
  37.     )
  38.     else
  39.         bbox := boundary
  40.     apply nextMethod self boundary:bbox args
  41.     self.frame := frame
  42.     self.stationary := fill <> undefined
  43.     self.fill := fill
  44.     self.stencilTransform := mutableCopy identityMatrix
  45.     self._font := font
  46.     self
  47. )
  48.  
  49. method recalcRegion self {class RadioButton} ->
  50. (
  51.     nextMethod self
  52.     local xOffset := 3
  53.     if (self.frame != undefined) do (
  54.         SetBoundary self.frame self.boundary
  55.         xOffset := xOffset + 2
  56.     )
  57.     SetTo self.stencilTransform self.globalTransform
  58.     local yOffset := (self.boundary.height - (getClass self).clickedStencil.bbox.height)/2
  59.     translate self.stencilTransform xOffset yOffset
  60. )
  61.  
  62. method activate self {class RadioButton} ->
  63. (
  64.     if (self.enabled) do
  65.         if (self.toggledOn) then
  66.             toggleOff self
  67.         else
  68.             toggleOn self
  69.     nextMethod self
  70. )
  71.  
  72. method draw self {class RadioButton} surf clip -> (
  73.     if (self.fill <> undefined) do
  74.         fill surf self.globalBoundary clip identityMatrix  self.fill
  75.     local drawStencil
  76.     if (self.pressed) then
  77.         drawStencil := (getClass self).clickedStencil
  78.     else if (self.toggledOn) then
  79.         drawStencil := (getClass self).checkedStencil
  80.     else
  81.         drawStencil := (getClass self).uncheckedStencil
  82.     fill surf drawStencil clip self.stencilTransform BlackBrush
  83.     local xOffset := 5 + drawStencil.bbox.width
  84.     local yOffset := drawStencil.bbox.height
  85.     ThreadCriticalUp()
  86.     translate self.stencilTransform xOffset yOffset
  87.     fill surf self._text clip self.stencilTransform BlackBrush
  88.     translate self.stencilTransform (-xOffset) (-yOffset)
  89.     ThreadCriticalDown()
  90.     if (self.frame <> undefined) do
  91.         drawLoweredFrame self.frame surf clip self.globalTransform
  92.     NextMethod self surf clip
  93. )
  94.  
  95. method textGetter self {class RadioButton} ->
  96. (
  97.     self._text.string
  98. )
  99.  
  100. method textSetter self {class RadioButton} newString->
  101. (
  102.     self._text.string := newString
  103.     notifyChanged self false
  104.     newString
  105. )
  106.  
  107. method fontGetter self {class RadioButton} ->
  108. (
  109.     self._font
  110. )
  111.  
  112. method fontSetter self {class RadioButton} newFont->
  113. (
  114.     self._text.font := newFont.font
  115.     self._text.size := newFont.fontSize
  116.     self._font := newFont
  117. )
  118.  
  119. class RadioGroup (TwoDSpace)
  120.     instance vars
  121.         controller
  122.         itemList            ---- The array of TextRadioButtons
  123.         value                ---- The value of the currently choosen radio button
  124.         frame
  125. end
  126.  
  127. method init self {class RadioGroup} #rest args #key 
  128.     boundary:                \
  129.     font:(theSystemFont)    \
  130.     itemList:                \
  131.     itemClass:(RadioButton)    \
  132.     itemBoundary:            \
  133.     fill:(WhiteBrush)        \
  134.     orientation:(@vertical)    ->
  135. (
  136.     local dynamicSetter,staticSetter,singleGetter,multipleGetter
  137.     local singleSetter,multipleSetter
  138.     local itemSpan
  139.     if (orientation == @horizontal) then (
  140.         staticSetter := ySetter
  141.         dynamicSetter := xSetter
  142.         singleGetter := heightGetter
  143.         multipleGetter := widthGetter
  144.         singleSetter := heightSetter
  145.         multipleSetter := widthSetter
  146.     )
  147.     else (
  148.         staticSetter := xSetter
  149.         dynamicSetter := ySetter
  150.         singleGetter := widthGetter
  151.         multipleGetter := heightGetter
  152.         singleSetter := widthSetter
  153.         multipleSetter := heightSetter
  154.     )
  155.     apply NextMethod self boundary:boundary fill:fill args
  156.     local listSize := size itemList
  157.     local i
  158.     if (boundary <> unsupplied) then (
  159.         itemSpan := ((multipleGetter boundary) - 4)/ listSize
  160.     )
  161.     else (
  162.         if (itemBoundary == unsupplied) then
  163.             if (orientation == @vertical) then
  164.                 itemSpan := font.leading + 6
  165.             else
  166.                 itemSpan := 50 -- arbitrary number
  167.         else
  168.             itemSpan := multipleGetter itemBoundary
  169.     )
  170.     local dynamicOffset := 2
  171.     local singleSpan := 0
  172.     print itemSpan
  173.     for i := 1 to listSize do (
  174.         local rb := new itemClass boundary:itemBoundary fill:(undefined) \
  175.             font:font text:(getNth itemList i)
  176.         dynamicSetter rb dynamicOffset --rb.y := yOffset
  177.         staticSetter rb 2
  178.         append self rb
  179.         if ((singleGetter rb.boundary) > singleSpan) do
  180.             singleSpan := (singleGetter rb.boundary)
  181.         dynamicOffset := dynamicOffset + itemSpan
  182.     )
  183.     if (boundary = unsupplied) do (
  184.         singleSetter self.boundary (singleSpan + 4)
  185.         multipleSetter self.boundary (itemSpan*listSize + 4)
  186.     )
  187.     self.stationary := true
  188.     self.controller := new RadioButtonController
  189.     self.controller.space := self
  190.     self.controller.wholeSpace := true
  191.     self.itemList := itemList
  192.     self.frame := new Frame
  193.     self
  194. )
  195.  
  196. method draw self {class RadioGroup} surf clip ->
  197. (
  198.     NextMethod self surf clip
  199.     drawLoweredFrame self.frame surf clip self.globalTransform
  200. )
  201.  
  202. method valueGetter self {class RadioGroup} ->
  203. (
  204.     local nth := getKeyOne self self.controller.chosenToggle
  205.     getNthKey self.itemList nth
  206. )
  207.  
  208. method valueSetter self {class RadioGroup} newVal ->
  209. (
  210.     local ord := (getone self.itemList newVal)
  211.     local i := getOrdOne self.itemList ord
  212.     if (i <> 0) do
  213.         self.controller.chosenToggle := self[i]
  214. )
  215.  
  216. method recalcRegion self {class RadioGroup} ->
  217. (
  218.     nextMethod self
  219.     setBoundary self.frame self.boundary
  220. )
  221.  
  222. -->>>
  223.